/* -*-jde-*- */
package app.usuario.beans;

import app.conexion.Conexion;
import app.conexion.ConexionException;
import app.util.SQLInjectionException;
import app.util.Validator;
import app.util.appException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Bean Telefono El telefono asignado al usuario
 *
 * @author Victor Miguel Peralta Santa Anna
 * @since Diciembre 2011
 * @version 0.1
 */
public class Telefono {

    /**
     * el identificador del telefono
     */
    private int nIdTelefono;
    /**
     * EL idenificador del usuario
     */
    private int nIdUsuario;
    /**
     * El telefono asignado al usuario
     */
    private String sTelefono;

    /**
     * @return the nIdUsuario
     */
    public int getnIdUsuario() {
        return nIdUsuario;
    }

    /**
     * Un teléfono que requiere el identificador del usuario, del telefono y el
     * telefono
     *
     * @param nIdTelefono El identificador del telefono. -1 si es telefono nuevo
     * @param nIdUsuario El identificador del usuario
     * @param sTelefono La cadena de telefono
     */
    public Telefono(int nIdTelefono, int nIdUsuario, String sTelefono) {
        this.nIdTelefono = nIdTelefono;
        this.nIdUsuario = nIdUsuario;
        this.sTelefono = sTelefono;
    }

    /**
     * @return the sTelefono
     */
    public String getsTelefono() {
        return sTelefono;
    }

    /**
     * La representación en cadena del telefono
     *
     * @return
     */
    @Override
    public String toString() {
        return "Telefono{" + "nIdTelefono=" + getnIdTelefono() + ", nIdUsuario=" + nIdUsuario + ", sTelefono=" + sTelefono + '}';
    }

    /**
     * Guarda el objeto en la base de datos independientemente si éste es nuevo
     * o no.
     */
    public void save() throws appException {

        try {

            Conexion con = new Conexion();
            String query = "select ";
            if (getnIdTelefono() == -1) {
                query += "addTelefono(" + nIdUsuario + "";
                query += ", '" + sTelefono + "');";

                if (!Validator.checkSQLInjection(query)) {
                    ResultSet r = con.exec(query);
                    while (r.next()) {
                        int resultado = r.getInt("addtelefono");
                        this.nIdTelefono = resultado;
                    }
                }

            } else {
                query += "updateTelefono(" + getnIdTelefono();
                query += ", '" + sTelefono + "');";

                con.exec(query);
            }

        } catch (ConexionException ce) {
            System.err.println(ce);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ce);
            throw new appException("No se pudo guardar el elemento: Telefono");
        } catch (SQLException sqle) {
            System.err.println(sqle);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, sqle);
            throw new appException("No se pudo guardar el elemento: Telefono");
        } catch (SQLInjectionException sqlie) {
            System.err.println(sqlie);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, sqlie);
            throw new appException(sqlie.getMessage());
        }

    }

    /**
     * Borra el objeto de la base de datos.
     */
    public void delete() throws appException {
        try {
            Conexion con = new Conexion();
            String query = "select deleteTelefono( " + getnIdTelefono() + " );";
            con.exec(query);
            con.close();
        } catch (ConexionException ce) {
            System.err.println(ce);
            Logger.getLogger(Conexion.class.getName()).log(Level.SEVERE, null, ce);
            throw new appException("No se pudo borrar el elemento: Telefono");
        }
    }

    /**
     * Conexiones de prueba a la base de datos
     *
     * @param args
     * @throws ConexionException
     * @throws SQLException
     * @throws appException
     */
    public static void main(String args[]) throws ConexionException, SQLException, appException {

        //nuevo
        Telefono a = new Telefono(-1, 1, " 1,00000000");
        a.save();
        // existente
        //Usuario u = new Usuario(2, "nuevo usuario", "washa washa", false, 'a');
        //tc.setsTipocontratacion("a");
        //u.save();

        //u.delete();


        System.out.println(a);
    }

    /**
     * @return the nIdTelefono
     */
    public int getnIdTelefono() {
        return nIdTelefono;
    }

    /**
     * @param sTelefono the sTelefono to set
     */
    public void setsTelefono(String sTelefono) {
        this.sTelefono = sTelefono;
    }
}
